package br.com.saeng2D.formulario.caixa_forca_c_m;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import br.com.saeng2D.formulario.caixa.ContainerAnimado;
import br.com.saeng2D.formulario.caixa.GrupoContainerAnimado;
import br.com.saeng2D.formulario.caixa.Dialogo;
import br.com.saeng2D.objeto.AbstratoObjeto;
import br.com.saeng2D.objeto.forca.ForcaCentralizada;
import br.com.saeng2D.objeto.forca.ForcaMomento;
import br.com.saeng2D.objeto.ponto.Ponto;
import br.com.saeng2D.superficie.Superficie;
import br.com.saeng2D.util.P2D;
import br.com.saeng2D.util.Util;

//Caixa de dialogo para selecionamento do objeto forca momento
public class DialogoForcaCentralizadaMomento extends Dialogo {
	private static final long serialVersionUID = 1L;
	private ControleContainerAnimadoForcaC controleContainerAnimadoC;
	private ControleContainerAnimadoForcaM controleContainerAnimadoM;
	private Ponto ponto;
	
	public DialogoForcaCentralizadaMomento(Superficie superficie, Ponto ponto) {
		super(superficie);
		this.ponto = ponto;
		montarLayout2();
		registrarEvento2();
		setVisible(true);
	}

	private void montarLayout2() {
		GrupoContainerAnimado grupo = new GrupoContainerAnimado();

		ForcaCentralizada forcaCentralizada = new ForcaCentralizada(50, 45);
		forcaCentralizada.setVariavelForca("");// + Util.getString("label_simbolo_grau"));
		ContainerAnimado containerAnimadoC = new ContainerAnimado(forcaCentralizada);
		controleContainerAnimadoC = new ControleContainerAnimadoForcaC(Util.getString("label_forca_centralizada"), containerAnimadoC, this, 10, 10, 250, 200);
		panelCentral.add(controleContainerAnimadoC);
		grupo.adicionarContainerAnimado(containerAnimadoC);
		
		ForcaMomento forcaMomento = new ForcaMomento(50, 45);
		forcaMomento.setVariavelForca("");// + Util.getString("label_simbolo_grau"));
		ContainerAnimado containerAnimadoM = new ContainerAnimado(forcaMomento);
		controleContainerAnimadoM = new ControleContainerAnimadoForcaM(Util.getString("label_forca_momento"), containerAnimadoM, this, 270, 10, 250, 200);
		panelCentral.add(controleContainerAnimadoM);
		grupo.adicionarContainerAnimado(containerAnimadoM);
		
		setSize(540, 290);
		Util.centralizar(this, superficie.getFormularioPrincipal());
	}
	
	public void registrarEvento2() {
		buttonAdicionar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				adicionarForcaNaSuperficie();
			}
		});
	}
	
	public void adicionarNaSuperficie() {
		adicionarForcaNaSuperficie();
	}

	private void adicionarForcaNaSuperficie() {
		boolean adicionado = false;
		if(controleContainerAnimadoC.getContainerAnimado().isSelecionado()) {
			ForcaCentralizada forcaCentralizada = (ForcaCentralizada) controleContainerAnimadoC.getContainerAnimado().getAbstratoAnimado().prototipo();
			forcaCentralizada.alterarTamanho(Util.getInt("tamanho_padrao_forca_centralizada"));
			String variavelForca = controleContainerAnimadoC.getVariavelForca();
			forcaCentralizada.setVariavelForca(variavelForca);
			forcaCentralizada.setCorVariavelForca(Util.getCor("cor_variavel_forca_central_"));
			P2D p2d = forcaCentralizada.getVetorReferencia().criarP2D();
			forcaCentralizada.setX(ponto.getX() - p2d.x);
			forcaCentralizada.setY(ponto.getY() + p2d.y);
			superficie.adicionarObjeto(forcaCentralizada);
			adicionado = true;
		}
		if(controleContainerAnimadoM.getContainerAnimado().isSelecionado()) {
			ForcaMomento forcaMomento = (ForcaMomento) controleContainerAnimadoM.getContainerAnimado().getAbstratoAnimado().prototipo();
			forcaMomento.alterarTamanho(Util.getInt("tamanho_padrao_forca_momento"));
			String variavelForca = controleContainerAnimadoM.getVariavelForca();
			forcaMomento.setVariavelForca(variavelForca);
			forcaMomento.setCorVariavelForca(Util.getCor("cor_variavel_forca_momento_"));
//			P2D p2d = forcaMomento.getVetorReferencia().criarP2D();
			forcaMomento.setX(ponto.getX());
			forcaMomento.setY(ponto.getY());
			
			AbstratoObjeto[] objetos = superficie.getObjetos();
			boolean contemForcaMNaposicao = false;
			
			for (AbstratoObjeto obj : objetos) {
				 if(obj instanceof ForcaMomento) {
					 ForcaMomento forcaM = (ForcaMomento) obj;
					 if(ponto.estarSob(forcaM.getX(), forcaM.getY())) {
						 contemForcaMNaposicao = true;
						 break;
					 }
				 }
			}
			if(contemForcaMNaposicao) {
				Util.mensagem(this, Util.getString("msg_contem_forcaM_na_posicao"));
				return;
			} else {
				superficie.adicionarObjeto(forcaMomento);
				adicionado = true;
			}
		}
		if(adicionado) {
			dispose();
		} else {
			Util.mensagem(this, Util.getString("msg_nao_selecionado_forca"));
		}
	}
}